static void kml_recompute_time_bounds(const waypoint* waypointp)
{
- gpsbabel::DateTime t = waypointp->GetCreationTime();
- if (t == 0)
- return;
-
- if (!t.isValid())
- return;
-
- if (!kml_time_min.isValid() || (t > 0 && t < kml_time_min)) {
- kml_time_min = t;
- }
-
- if (!kml_time_max.isValid() || t > kml_time_max) {
- kml_time_max = t;
+ if (waypointp->GetCreationTime().isValid())
+ {
+ if(!(kml_time_min.isValid()) ||
+ (waypointp->GetCreationTime() < kml_time_min)) {
+ kml_time_min = waypointp->GetCreationTime();
+ }
+ if (!(kml_time_max.isValid()) ||
+ (waypointp->GetCreationTime() > kml_time_max )) {
+ kml_time_max = waypointp->GetCreationTime();
+ }
}
}
" %04d-%02d-%02d",
t.date().year(),
t.date().month(),
- t.date().day()),
+ t.date().day());
r = xstrappend(r, temp);
xfree(temp);
}
QUEUE_FOR_EACH(&header->waypoint_list, elem, tmp) {
waypoint* tpt = (waypoint*)elem;
- // FIXME: implicit time_t test here.
- if (tpt->GetCreationTime().isValid() && tpt->GetCreationTime() > 0) {
+ if (tpt->GetCreationTime().isValid()) {
points_with_time++;
if (points_with_time >= 2) {
return 1;
QUEUE_FOR_EACH(&header->waypoint_list, elem, tmp) {
waypoint* tpt = (waypoint*)elem;
- // FIXME: implicit time_t test here.
- if (tpt->GetCreationTime().isValid() && tpt->GetCreationTime() > 0) {
+
+ if (tpt->GetCreationTime().isValid()) {
QString time_string = tpt->CreationTimeXML();
writer->writeOptionalTextElement("when", time_string);
} else {
<tr><td>Longitude: -91.610350 </td></tr>
<tr><td>Latitude: 30.062183 </td></tr>
<tr><td>Altitude: 3.281 ft </td></tr>
- <tr><td>Speed: 0.0 mph </td></tr>
<tr><td>Heading: 300.1 </td></tr>
<tr><td>Time: 2002-05-25T17:06:21Z </td></tr>
</table>
<tr><td>Longitude: -91.610350 </td></tr>
<tr><td>Latitude: 30.062183 </td></tr>
<tr><td>Altitude: 3.281 ft </td></tr>
- <tr><td>Speed: 0.0 mph </td></tr>
<tr><td>Heading: 300.1 </td></tr>
<tr><td>Time: 2002-05-25T17:06:21Z </td></tr>
</table>
<tr><td>Altitude: 0.449 ft </td></tr>
<tr><td>Heart rate: 111 </td></tr>
<tr><td>Cadence: 151 </td></tr>
- <tr><td>Speed: 0.0 mph </td></tr>
<tr><td>Heading: 360.0 </td></tr>
<tr><td>Time: 2008-08-20T07:04:48Z </td></tr>
</table>
<tr><td><b>Distance</b> 1.1 mi </td></tr>
<tr><td><b>Min Alt</b> 0.000 ft </td></tr>
<tr><td><b>Max Alt</b> 0.000 ft </td></tr>
-<tr><td><b>Max Speed</b> 0.0 mph </td></tr>
-<tr><td><b>Avg Speed</b> 6.1 mph </td></tr>
<tr><td><b>Start Time</b>2007-07-27T05:24:05Z</td></tr>
<tr><td><b>End Time</b>2007-07-27T05:35:00Z</td></tr>
</table>]]>
<table>
<tr><td>Longitude: -86.844140 </td></tr>
<tr><td>Latitude: 35.836146 </td></tr>
-<tr><td>Speed: 0.0 mph </td></tr>
<tr><td>Heading: 305.9 </td></tr>
<tr><td>Time: 2007-07-27T05:24:05Z </td></tr>
</table>
<table>
<tr><td>Longitude: -86.843137 </td></tr>
<tr><td>Latitude: 35.835023 </td></tr>
-<tr><td>Speed: 0.0 mph </td></tr>
<tr><td>Heading: 160.7 </td></tr>
<tr><td>Time: 2007-07-27T05:30:00Z </td></tr>
</table>
<table>
<tr><td>Longitude: -86.842084 </td></tr>
<tr><td>Latitude: 35.835410 </td></tr>
-<tr><td>Speed: 0.0 mph </td></tr>
<tr><td>Heading: 64.5 </td></tr>
<tr><td>Time: 2007-07-27T05:31:00Z </td></tr>
</table>
<table>
<tr><td>Longitude: -86.838782 </td></tr>
<tr><td>Latitude: 35.836744 </td></tr>
-<tr><td>Speed: 0.0 mph </td></tr>
<tr><td>Heading: 146.9 </td></tr>
<tr><td>Time: 2007-07-27T05:35:00Z </td></tr>
</table>
<tr><td><b>Distance</b> 1.1 mi </td></tr>
<tr><td><b>Min Alt</b> 0.000 ft </td></tr>
<tr><td><b>Max Alt</b> 0.000 ft </td></tr>
-<tr><td><b>Max Speed</b> 0.0 mph </td></tr>
-<tr><td><b>Avg Speed</b> 6.1 mph </td></tr>
<tr><td><b>Start Time</b>2007-07-27T05:24:05Z</td></tr>
<tr><td><b>End Time</b>2007-07-27T05:35:00Z</td></tr>
</table>]]>
<table>
<tr><td>Longitude: -86.844140 </td></tr>
<tr><td>Latitude: 35.836146 </td></tr>
-<tr><td>Speed: 0.0 mph </td></tr>
<tr><td>Heading: 305.9 </td></tr>
<tr><td>Time: 2007-07-27T05:24:05Z </td></tr>
</table>
<table>
<tr><td>Longitude: -86.843137 </td></tr>
<tr><td>Latitude: 35.835023 </td></tr>
-<tr><td>Speed: 0.0 mph </td></tr>
<tr><td>Heading: 160.7 </td></tr>
<tr><td>Time: 2007-07-27T05:30:00Z </td></tr>
</table>
<table>
<tr><td>Longitude: -86.842084 </td></tr>
<tr><td>Latitude: 35.835410 </td></tr>
-<tr><td>Speed: 0.0 mph </td></tr>
<tr><td>Heading: 64.5 </td></tr>
<tr><td>Time: 2007-07-27T05:31:00Z </td></tr>
</table>
<table>
<tr><td>Longitude: -86.838782 </td></tr>
<tr><td>Latitude: 35.836744 </td></tr>
-<tr><td>Speed: 0.0 mph </td></tr>
<tr><td>Heading: 146.9 </td></tr>
<tr><td>Time: 2007-07-27T05:35:00Z </td></tr>
</table>
<LongitudeDegrees>-118.7587920</LongitudeDegrees>
</Position>
<AltitudeMeters>308.7</AltitudeMeters>
- <Extensions>
- <TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
- <Speed>0.010</Speed>
- </TPX>
- </Extensions>
</Trackpoint>
<Trackpoint>
<Time>2008-08-21T13:08:54Z</Time>
<LongitudeDegrees>-118.7587920</LongitudeDegrees>
</Position>
<AltitudeMeters>308.7</AltitudeMeters>
- <Extensions>
- <TPX xmlns="http://www.garmin.com/xmlschemas/ActivityExtension/v2">
- <Speed>0.010</Speed>
- </TPX>
- </Extensions>
</Trackpoint>
<Trackpoint>
<Time>2008-08-21T13:08:54Z</Time>
-$FRSPD,0.02*63\r
$FRWPT,3003.73100,N,09136.62100,W,1.0,250502,170621*63\r
$FRSPD,0.64*63\r
$FRWPT,3003.76700,N,09136.63400,W,0.0,250502,170955*69\r
// As a crutch, mimic the old behaviour of an uninitialized creation time
// being 1/1/1970.
DateTime() {
- this->setTime_t(0);
+ setTime_t(0);
t_ = -1;
}
DateTime(QDateTime dt) : QDateTime(dt) {}
// Handle time_tm tm = wpt->creation_time;
- operator const time_t() const { return this->toTime_t(); }
+ operator const time_t() const { return toTime_t(); }
const time_t& operator=(const time_t& t) {
- this->setTime_t(t);
+ setTime_t(t);
return t;
}
time_t operator--(int) {
setTime_t(toTime_t() - 1);
- return this->toTime_t();
+ return toTime_t();
}
time_t operator++(int) {
setTime_t(toTime_t() + 1);
- return this->toTime_t();
+ return toTime_t();
}
time_t operator+=(const time_t& t) {
setTime_t(toTime_t() + t);
- return this->toTime_t();
+ return toTime_t();
}
// Handle tm = *gmtime(&wpt->creation_time) ...poorly.
inline const time_t *operator&() {
- t_ = this->toTime_t();
+ t_ = toTime_t();
return &t_;
}
// Integer form: YYMMDD
int ymd() const {
- QDate date(this->date());
- return date.year() * 10000 + date.month() * 100 + date.day();
+ QDate d(date());
+ return d.year() * 10000 + d.month() * 100 + d.day();
}
int ddmmyy() const {
- QDate date(this->date());
- return date.day() * 10000 + date.month() * 100 + date.year();
+ QDate d(date());
+ return d.day() * 10000 + d.month() * 100 + d.year();
}
int hms() const {
- QTime time(this->time());
- return time.hour() * 10000 + time.minute() * 100 + time.second();
+ QTime t(time());
+ return t.hour() * 10000 + t.minute() * 100 + t.second();
}
+ // Temporary: Override the standard, also handle time_t 0 as invalid.
+ bool isValid() const {
+ return date().isValid() && time().isValid() && toTime_t() > 0;
+ }
+
+
// Qt 4.6 and under doesn't have msecsTo. Fortunately, it's easy to
// provide. It's a 64-bit because if the times aren't on the same day,
// the returned value can be quite large.
int64_t msecsTo(const QDateTime &dt) {
- qint64 days = this->daysTo(dt);
- qint64 msecs = this->time().msecsTo(dt.time());
+ qint64 days = daysTo(dt);
+ qint64 msecs = time().msecsTo(dt.time());
return days * (1000 * 3600 * 24) + msecs;
}
// the trailing digits aren't .000. Always UTC.
QString toPrettyString() const {
const char* format;
- if (this->time().msec()) {
+ if (time().msec()) {
format = "yyyy-MM-ddTHH:mm:ss.zzzZ";
} else {
format = "yyyy-MM-ddTHH:mm:ssZ";
}
- return this->toUTC().toString(format);
+ return toUTC().toString(format);
}
private:
if ((wpt->longitude < -180) || (wpt->longitude > 180.0))
fatal("Invalid longitude %f in waypoint %s.\n",
lon_orig, wpt->shortname ? wpt->shortname : "");
- if (!wpt->creation_time.isValid()) {
- warning("%s: Invalid timestamp in waypoint %s.\n",
- wpt->session->name,
- wpt->shortname ? wpt->shortname : "");
- wpt->creation_time = 0;
- }
+
/*
* Some input may not have one or more of these types so we
* try to be sure that we have these fields even if just by